<?php

/**
 * This is the model class for table "user".
 *
 * The followings are the available columns in table 'user':
 *
 * @property string $id
 * @property string $username
 * @property string $password
 * @property string $lastlogintime
 * @property string $fullname
 * @property string $email
 * @property string $birthdate
 * @property integer $role
 *
 * The followings are the available model relations:
 * @property Role $role0
 */
class User extends ExcActiveRecord {
    public $repassword;
    public $verifyCode;
	private $_admin;
    /**
     * Returns the static model of the specified AR class.
     *
     * @return User the static model class
     */
    public static function model($className = __CLASS__)
    {
        return parent::model($className);
    }

    /**
     *
     * @return string the associated database table name
     */
    public function tableName()
    {
        return 'user';
    }

    /**
     *
     * @return array validation rules for model attributes.
     */
    public function rules()
    {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
            array('username, password, fullname, email,  role', 'required'),
            array('username, email', 'unique'),
            array('email', 'email'),
            array('password', 'compare', 'compareAttribute' => 'repassword'),
            array('role', 'numerical', 'integerOnly' => true),
            array('birthdate, lastlogintime, repassword', 'safe'),
            // The following rule is used by search().
            // Please remove those attributes that should not be searched.
            array('id, username, password, lastlogintime, fullname, email, birthdate, role', 'safe', 'on' => 'search'),
            array('verifyCode', 'captcha', 'allowEmpty' => !CCaptcha::checkRequirements()),
            );
    }

    /**
     *
     * @return array relational rules.
     */
    public function relations()
    {
        // NOTE: you may need to adjust the relation name and the related
        // class name for the relations automatically generated below.
        return array(
            'userRole' => array(self::BELONGS_TO, 'Role', 'role'),
            );
    }

    /**
     *
     * @return array customized attribute labels (name=>label)
     */
    public function attributeLabels()
    {
        return array(
            'id' => 'ID',
            'username' => 'Username',
            'password' => 'Password',
            'repassword' => 'Repeat Password',
            'verifyCode' => 'Verify Code',
            'lastlogintime' => 'Last login time',
            'fullname' => 'Fullname',
            'email' => 'Email',
            'birthdate' => 'Birthdate',
            'role' => 'Role',
            );
    }

	public function isAdmin() {
		if($this->_admin === null) {
			Yii::log("adfd".$this->id, CLogger::LEVEL_ERROR);
			$userRole = Role::model()->findByPk($this->role);
			if(isset($userRole)) {
				$this->_admin = strcmp($userRole->rolename, 'admin');
			} else {
				return false;
			}
		}
		return $this->_admin;
	}

    /**
     * Retrieves a list of models based on the current search/filter conditions.
     *
     * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions.
     */
    public function search()
    {
        // Warning: Please modify the following code to remove attributes that
        // should not be searched.
        $criteria = new CDbCriteria;

        $criteria->compare('id', $this->id, true);
        $criteria->compare('username', $this->username, true);
        $criteria->compare('password', $this->password, true);
        $criteria->compare('lastlogintime', $this->lastlogintime, true);
        $criteria->compare('fullname', $this->fullname, true);
        $criteria->compare('email', $this->email, true);
        $criteria->compare('birthdate', $this->birthdate, true);
        $criteria->compare('role', $this->role);

        return new CActiveDataProvider(get_class($this), array(
                'criteria' => $criteria,
                ));
    }

    public function dateAttributes()
    {
        return array('birthdate');
    }

    public function afterValidate()
    {
        parent::afterValidate();
        if (!$this->hasErrors()) {
            $this->password = $this->encrypt($this->password);
        }
    }

	public function encrypt($password) {
		return md5($password);
	}
}